Analisando dados de vendas de video games¶

In [2]:
import pandas as pd
import plotly.express as px 
In [3]:
df = pd.read_csv(r"C:\Users\vcsme\Documents\Curso Analise de Dados\M3\3-Projeto de analise de dados\projeto_guiado\vgchartz-2024.csv")
In [4]:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 64016 entries, 0 to 64015
Data columns (total 14 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   img           64016 non-null  object 
 1   title         64016 non-null  object 
 2   console       64016 non-null  object 
 3   genre         64016 non-null  object 
 4   publisher     64016 non-null  object 
 5   developer     63999 non-null  object 
 6   critic_score  6678 non-null   float64
 7   total_sales   18922 non-null  float64
 8   na_sales      12637 non-null  float64
 9   jp_sales      6726 non-null   float64
 10  pal_sales     12824 non-null  float64
 11  other_sales   15128 non-null  float64
 12  release_date  56965 non-null  object 
 13  last_update   17879 non-null  object 
dtypes: float64(6), object(8)
memory usage: 6.8+ MB
In [5]:
df.describe()
Out[5]:
critic_score total_sales na_sales jp_sales pal_sales other_sales
count 6678.000000 18922.000000 12637.000000 6726.000000 12824.000000 15128.000000
mean 7.220440 0.349113 0.264740 0.102281 0.149472 0.043041
std 1.457066 0.807462 0.494787 0.168811 0.392653 0.126643
min 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000
25% 6.400000 0.030000 0.050000 0.020000 0.010000 0.000000
50% 7.500000 0.120000 0.120000 0.040000 0.040000 0.010000
75% 8.300000 0.340000 0.280000 0.120000 0.140000 0.030000
max 10.000000 20.320000 9.760000 2.130000 9.850000 3.120000
In [6]:
for col in ['title', 'console', 'genre', 'publisher', 'developer']:
    print(df[col].value_counts())
    print('_'*50)
title
Plants vs. Zombies                  17
Pac-Man                             16
Monopoly                            15
Doom                                14
Double Dragon                       14
                                    ..
Bakegyamon: Ayakashi Fighting        1
Avatar Showdown                      1
Avatar Fighter Online                1
Avatar Fighter                       1
Yurukill: The Calumniation Games     1
Name: count, Length: 39798, dtype: int64
__________________________________________________
console
PC      12617
PS2      3565
DS       3288
PS4      2878
PS       2707
        ...  
TG16        3
FDS         1
C128        1
Aco         1
BBCM        1
Name: count, Length: 81, dtype: int64
__________________________________________________
genre
Misc                9304
Action              8557
Adventure           6260
Role-Playing        5721
Sports              5586
Shooter             5410
Platform            4001
Strategy            3685
Puzzle              3521
Racing              3425
Simulation          3158
Fighting            2367
Action-Adventure    1877
Visual Novel         493
Music                297
Party                151
MMO                  115
Education             35
Board Game            33
Sandbox               20
Name: count, dtype: int64
__________________________________________________
publisher
Unknown               8842
Sega                  2207
Ubisoft               1663
Electronic Arts       1619
Activision            1582
                      ... 
Cancer Research UK       1
XperimentalZ Games       1
Nano Games               1
Cooking Mama Ltd.        1
PLAYDIUS                 1
Name: count, Length: 3383, dtype: int64
__________________________________________________
developer
Unknown             4435
Konami               976
Sega                 915
Capcom               870
Namco                489
                    ... 
Solutions 2 Go         1
Whampashimash          1
Redwind Software       1
Iron Square            1
Paretto                1
Name: count, Length: 8862, dtype: int64
__________________________________________________

Quais são os 10 jogos mais vendidos? E como é a venda desses para cada plataforma?¶

In [7]:
jogos_mais_vendidos = df.groupby(['title'])['total_sales'].sum().sort_values(ascending=False)

top_jogos = pd.DataFrame({'titulos': jogos_mais_vendidos.index, 'vendas': jogos_mais_vendidos.values})

top_10_jogos = top_jogos[0:10]

top_10_jogos = top_10_jogos.sort_values(by='titulos')
In [8]:
px.bar(top_10_jogos, x='titulos', y='vendas', title='Jogos mais vendidos',
       labels={
            "vendas": "Total de Vendas em Milhões",
            "titulos": "Título do Jogo",
       })
In [9]:
df_top_games = df[df['title'].isin(top_10_jogos['titulos'].unique())]

df_top_games = df_top_games.sort_values(by='title')

px.bar(df_top_games, x='title', y='total_sales', color='console', title='Jogos mais vendidos por plataforma',
       labels={
            "total_sales": "Total de Vendas em Milhões",
            "title": "Título do Jogo",
            "console": "Plataforma",
    })

Como foi a venda de jogos por ano para as distribuidoras que mais venderam?¶

In [10]:
df['year'] = pd.to_datetime(df['release_date']).dt.year
In [11]:
pub_vendas_por_ano = df.groupby(['publisher', 'year']).agg({'total_sales': 'sum'}).reset_index()

pub_vendas = pub_vendas_por_ano.groupby('publisher').sum('total_sales').reset_index()

top_pub = pub_vendas_por_ano[pub_vendas_por_ano['publisher'].isin(pub_vendas[pub_vendas['total_sales'] < 100]['publisher'].values)]
In [12]:
px.line(top_pub, x='year', y='total_sales',
       color='publisher', title='Vendas das Distribuidoras por Ano',
       labels={
           'total_sales': 'Total de Vendas em Milhões',
           'year': 'Ano'
       })
In [13]:
px.area(top_pub, x='year', y='total_sales',
       color='publisher', title='Vendas das Distribuidoras por Ano',
       labels={
           'total_sales': 'Total de Vendas em Milhões',
           'year': 'Ano'
       })

A nota de um jogo influencia em suas vendas?¶

In [14]:
px.scatter(df, x='critic_score', y='total_sales', hover_data=['title'])
In [15]:
px.scatter(df, x='critic_score', y='total_sales', color='console', hover_data=['title'])

Como variam as notas de acordo com o gênero?¶

In [16]:
popular_genres = df[df['genre'].isin(['Action', 'Adventure', 'Role-Playing', 'Shooter', 'Platform'])]
In [17]:
px.histogram(
    popular_genres, x='critic_score', 
    color='genre', title='Histograma Notas de Jogos por Gênero',
    nbins=10, barmode='group', histnorm='probability density',
    labels={
        'count': 'Quantidade de Notas por Faixa',
        'critic_score': 'Faixa de Notas por Jogos'
    }
)

Como variam o número de vendas dos jogos em cada região?¶

In [18]:
popular_platforms = df[df['console'].isin(['PS3', 'PS4', 'X360', 'XOne', 'Wii', 'WiiU', 'PC'])]
In [19]:
px.box(
    popular_platforms, y=['na_sales', 'pal_sales', 'other_sales', 'jp_sales'],
    hover_data=['title'], color='console', title='Boxplots Vendas por Região',
    labels={
        'value': 'Total de Vendas em Milhões',
        'valiable': 'Região'
    }
)
In [ ]: